# ============================================================
# * Copyright © hk. 2022-2025. All rights reserved.
# * File name: CMakeLists.txt
# * Author   : 苏木
# * Date     : 2025-05-22
# * Version  : 
# * Description: cmake version 3.16.3
# ============================================================
## https://cmake.com.cn/cmake/help/latest/guide/tutorial/index.html
## https://cmake.org/cmake/help/latest/

# 指定 CMake 的最低版本要求
# --------------------------------------------------
cmake_minimum_required(VERSION 3.10)


# 设置项目名称和使用的编程语言
# --------------------------------------------------
project(SPROJECT C)


# 指定可执行程序和源文件
# --------------------------------------------------
add_executable(app_demo.out main.c)


# 比较 CMake将比较测试分为三个不同的类别：数字、字符串和版本号
# --------------------------------------------------
# 语法形式都遵循相同的模式: if(value1 OPERATOR value2)
# symbol  |        num        |        string        |       version             |
#   <     | LESS              | STRLESS              | VERSION_LESS              |
#   >     | GREATER           | STRGREATER           | VERSION_GREATER           |
#   =     | EQUAL             | STREQUAL             | VERSION_EQUAL             |
#   <=    | LESS_EQUAL$^1$    | STRLESS_EQUAL$^1$    | VERSION_LESS_EQUAL$^1$    |
#   >=    | GREATER_EQUAL$^1$ | STRGREATER_EQUAL$^1$ | VERSION_GREATER_EQUAL$^1$ |
# 注意：$^1$仅适用于CMake 3.7及以后的版本。

# 数字比较
# -------------------------
# Valid numeric expressions, all evaluating as true
message(STATUS "==> 数字比较")
if(2 GREATER 1)
	message(STATUS "if(2 GREATER 1)")
else()
	message(STATUS "else(2 GREATER 1)")
endif()

if("23" EQUAL 23)
	message(STATUS "if(\"23\" EQUAL 23)")
else()
	message(STATUS "else(\"23\" EQUAL 23)")
endif()

set(val 42)
if(${val} EQUAL 42)
	message(STATUS "if(\${val} EQUAL 42)")
else()
	message(STATUS "else(\${val} EQUAL 42)")
endif()

if("${val}" EQUAL 42)
	message(STATUS "if(\"\${val}\" EQUAL 42)")
else()
	message(STATUS "else(\"\${val}\" EQUAL 42)")
endif()

# Invalid expression that evaluates as true with at
# least some CMake versions. Do not rely on this behavior.
if("23a" EQUAL 23)
	message(STATUS "if(\"23a\" EQUAL 23)")
else()
	message(STATUS "else(\"23a\" EQUAL 23")
endif()
message("")


# 字符串比较
# -------------------------
# 对于字符串，是按字典顺序进行比较。
# 没有对字符串的内容做任何假设，但是要注意前面描述变量/字符串替代的可能性。
# 字符串比较是发生替换的常见情况之一。
message(STATUS "==> 字符串比较")
if("sumu" STREQUAL "sumu") #是否相等比较有用
	message(STATUS "if(\"sumu\" STREQUAL \"sumu\")")
else()
	message(STATUS "else(\"sumu\" STREQUAL \"sumu\")")
endif()
message("")

# 版本号比较
# -------------------------
# 版本号比较有点像数字比较的增强版。
# 版本号假设为major[.minor[.patch[.]的形式，每个组件都应该是正整数。
# 比较两个版本号时，首先比较major。只有当major相等时，才会比较minor(如果存在的话)，以此类推。缺失的部分视为零。
message(STATUS "==> 版本号比较")
if(1.2 VERSION_EQUAL 1.2.0)
	message(STATUS "if(1.2 VERSION_EQUAL 1.2.0)")
else()
	message(STATUS "else(1.2 VERSION_EQUAL 1.2.0)")
endif()
if(1.2 VERSION_LESS 1.2.3)
	message(STATUS "if(1.2 VERSION_LESS 1.2.3)")
else()
	message(STATUS "else(1.2 VERSION_LESS 1.2.3)")
endif()
if(1.2.3 VERSION_GREATER 1.2)
	message(STATUS "if(1.2.3 VERSION_GREATER 1.2)")
else()
	message(STATUS "else(1.2.3 VERSION_GREATER 1.2)")
endif()
if(2.0.1 VERSION_GREATER 1.9.7)
	message(STATUS "if(2.0.1 VERSION_GREATER 1.9.7)")
else()
	message(STATUS "else(2.0.1 VERSION_GREATER 1.9.7)")
endif()
if(1.8.2 VERSION_LESS 2)
	message(STATUS "if(1.8.2 VERSION_LESS 2)")
else()
	message(STATUS "else(1.8.2 VERSION_LESS 2)")
endif()
message("")
